home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Best of Shareware
/
Best of PC Windows Shareware 1.0 - Wayzata Technology (7111) (1993).iso
/
mac
/
ZIPPED
/
DOS
/
GRAPHICS
/
MASWED.ZIP
/
BOX.ASM
next >
Wrap
Assembly Source File
|
1992-07-15
|
3KB
|
110 lines
;BOX.ASM
;TB syntax för att rita en ruta på skärmen
; call plot (column%,wid%,heig%,x%,y%,col%)
; sub plot inline
; $inline "box.bin"
; end sub
.286
pixseg1 equ 0A000h ;segment för displayminnet <64k
pixseg2 equ 0B000h ; " >64k
col equ 6 ;stackoffset färg
y equ 10 ; " y-koordinat
x equ 14 ; " x-koordinat
heig equ 18 ; " höjd
wid equ 22 ; " bitmask (OBS!) i låga byten
column equ 26 ; " columner (byte) bildbredd
code segment
assume cs:code
push bp ;save base pointer
mov bp,sp ;move stack pointer to bp
push ds
mov dx,3CEh
mov ax,0F01h ;alla färgplan till
out dx,ax ;skriv Fh till enable set/reset reg
mov al,0
lds di,[bp+col]
mov ah,byte ptr ds:[di]
out dx,ax ;skriv col till set/reset reg
lds di,[bp+x]
mov ax,ds:[di] ;ladda x-koordinaten
mov cx,ax ;spara x i cx
shr ax,3 ;x1=x/8
mov bx,ax ;spara x1 i bx
and cx,7 ;isolera 3 lägsta bitar i cl
lds di,[bp+wid]
mov ax,ds:[di]
ror ax,cl ;skifta höger cl steg
push ax ;spara den andra bitmasken
mov ah,al
mov al,8
out dx,ax ;skriv mask till bit mask reg
lds di,[bp+column]
mov ax,ds:[di]
mov cx,ax ;spara column i cx
lds di,[bp+y]
mov ax,ds:[di] ;ladda y-koordinaten
mul cx ;column*y (1 i dx om>64k)
add ax,bx ;column*y+x1
mov si,ax ;offset
push si ;spara adressen
mov bx,cx ;spara column i bx
lds di,[bp+heig]
mov cx,ds:[di]
push cx ;spara höjden
shl dx,12 ;1000h om dx=1
mov ax,pixseg1
add ax,dx ;addera 1000h om adr>64k
mov ds,ax ;segment
push ds ;spara segmentpekaren
vert1:
or ds:si,al
mov ax,si
add ax,bx ;nästa rad, addera columnvärdet
jnc lab1
mov dx,pixseg2 ;>64k
mov ds,dx
lab1:
mov si,ax
loop vert1
pop ds ;återställ segmentpekaren
pop cx ;återställ höjden
pop si ;återställ adressen
pop ax ;läs tillbaka bitmasken
mov al,8
mov dx,3CEh
out dx,ax ;sätt den andra bitmasken
mov ax,si
add ax,1 ;byten till höger adresseras
mov si,ax
vert2:
or ds:si,al
mov ax,si
add ax,bx ;nästa rad, addera columnvärdet
jnc lab2
mov dx,pixseg2 ;>64k
mov ds,dx
lab2:
mov si,ax
loop vert2
mov dx,3CEh ;återställ vissa register
mov ax,0FF08h ;återställ med FF
out dx,ax ;skriv till bit mask reg
mov ax,0001h ;återställ med 0
out dx,ax ;skriv till enable set/reset reg
pop ds
pop bp
code ends
end